早期Laravel有一個 Laravel/ui
的套件,有內建一個基本的會員註冊登入系統,很多教學者也以此為宣傳,告訴大家 laravel 用來建立會員系統有多快,然後呢?然後就沒有然後了,很多新手不知道要去那裏調整登入方式或是修改頁面,所以我一直都覺得,學習還是要靠自己,不要相信那些速成的花招,踏實點比較好,該花的時間就是要花下去。
新版本的 laravel 有提供兩套會員相關的鷹架系統,所謂的鷹架(scaffold),就和其名一樣,只是幫你搭建一個基本的形狀,雖然看起來有一定程度的功能,但也保留了很多可以再改善及自訂的空間。
Breeze - 一個輕量級的會員系統,包含了認證的功能,同時支援前端以 vue, react, inertia 或 liveware 來建立前後端分離的 SPA
架構,CSS 的框架預設是使用 tailwind CSS
Jetstream - 一個用上了不少 laravel 特性的會員系統,同時支援群組功能,但是架構有點大,可以花另外三十天來說明,所以這次不使用這套。
選擇 laravel Breeze
還有一個原因是它有提供了 Vue+Inertia.js
的方案,
Inertia.js 是什麼?它是一個 SPA 應用的中間套件,把原本前後端溝通的複雜流程簡化,讓後端工程師可以在原本工作流程中去實現交互,而不用另外再寫API來傳遞資料;
套件的說明可以參考官網:inertia.js;
實例應用可以參考鐵人賽 Lucas 大大的文章,我是因為這系列文章入坑 inertia.js
的:
關於我用 Laravel 寫 SPA 卻不寫 API 的那檔事
Laravel 本身也推出一個和 inertia 類似的套件是 liveware,前端搭配的是 laravel 自己的 blade,有興趣的朋友可以參考看看。
我沒有選擇 liveware 的原因是想走出舒適圈,整套都是 laravel 當然很好,但多點異界整合對於開拓視野更有幫助,所以這個選擇沒有優劣對錯的問題,只是傾聽心底的聲音的結果.....(在供三小...)
選擇 laravel Breeze
最後一個原因是 laravel
近幾個版本把預設的 CSS 框架從 bootstrap
改成 tailwind css
了,我懶得去改設定,所以就順勢學了起來,之後就覺得很棒,一直用到現在,我並沒有用到太多的進階功能,基本的 class 我就很夠用了;
和 bootstrap 最大的不同大概是編譯後的 CSS 檔很小,所以傳輸速度快,而在 3.0 加入 JIT 模式後,幾乎已經不用再自己定義額外的 CSS 了,全部都可以在 class 中完成,缺點就是每個組件的 class 都有夠長的。。。
一樣的,附上官網及讓我入坑的鐵人賽文章:
廢話太多了,來安裝吧!
複製官網的指令:
composer require laravel/breeze --dev
這個指令只是把套件抓下來,並指定為開發環境下使用,接著要正式安裝,讓套件把一些 controller, migration, config 之類的都幫我們建好,當然也包含了 vue 及 inertia 的設定。
php artisan breeze:install vue
這個指令會以使用vue做為前端頁面為前提來安裝需要的內容。
可以看到在安裝完成時,laravel 自動幫我們執行了一次的 vite build 的動作,並產了一堆的組件的檔案及 css,你可以看到這個 css 只有 23Kb 左右。
接著是建立資料庫,在 .env
中填入你的資料庫名稱,記得先在 mariaDB
中建好一個資料庫:
下指令來建立對應的資料,想知道資料表的內容,可以參考資料夾 database
中的 migration
。
php artisan migrate
建完資料表,後端的部份算是告一段落了,接下來是處理前端,把前端需要的套件都裝起來,下個npm的指令就可以了
npm install
laravel 幫我們把 vite
的 server
環境和 apache
的環境整合好了,所以不用擔心 port 佔用的問題,也不用擔心在看前端是一個網址,看後端時是另一個網址,你可以在同一個網址享受前端使用 vite
帶來的即時回應,也可以在後端修改後,在同一個頁面中立即查看結果。
執行 vite server
環境
npm run dev
首頁:
你可以快速的測試一下,看看會員功能是否正常:
註冊:
登入:
後台:
相關的controller放在 Auth
資料夾中
前端頁面檔案放在 js 中的 Page
組件放在 Component
中 會員系統的主要頁面是在子資料夾 Auth
這樣我們就完成了基本會員系統的建置了,想了解到底裝了什麼細節及設定長得如何的可以參考以下的檔案:
以上這些檔案,根據需求不同,可能會再去做個別的調整,之後有遇到再來說,今天就先到這吧。